package com.sheng.leetcode.year2023.month06.day26;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2023/06/26
 * <p>
 * 2485. 找出中枢整数<p>
 * <p>
 * 给你一个正整数 n ，找出满足下述条件的 中枢整数 x ：<p>
 * 1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。<p>
 * 返回中枢整数 x 。如果不存在中枢整数，则返回 -1 。题目保证对于给定的输入，至多存在一个中枢整数。<p>
 * <p>
 * 示例 1：<p>
 * 输入：n = 8<p>
 * 输出：6<p>
 * 解释：6 是中枢整数，因为 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21 。<p>
 * <p>
 * 示例 2：<p>
 * 输入：n = 1<p>
 * 输出：1<p>
 * 解释：1 是中枢整数，因为 1 = 1 。<p>
 * <p>
 * 示例 3：<p>
 * 输入：n = 4<p>
 * 输出：-1<p>
 * 解释：可以证明不存在满足题目要求的整数。<p>
 * <p>
 * 提示：<p>
 * 1 <= n <= 1000<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/find-the-pivot-integer">2485. 找出中枢整数</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode2485 {

    @Test
    public void test01() {
//        int n = 8;
//        int n = 1;
        int n = 4;
        System.out.println(new Solution().pivotInteger(n));
    }
}

class Solution {
    public int pivotInteger(int n) {
        // 假设一个数 x，存在  x * (x + 1) / 2 = n * (n + 1) / 2 - x * (x - 1) / 2
        // 化简可得 2 * x^2 = n^2 + n
        int m = (int) (Math.pow(n, 2) + n);
        // 判断能否整除
        if (m % 2 == 0) {
            m /= 2;
            double sqrt = Math.sqrt(m);
            double v = sqrt % 1;
            // 判断小数点后的数是否为 0，从而判断返回结果是否为整数
            if (v == 0) {
                return (int) sqrt;
            } else {
                return -1;
            }
        } else {
            return -1;
        }
    }
}
